#pragma once
#include <map>
#include <set>
#include <vector>
#include "DFA.h"
using std::map;
using std::pair;
using std::set;
using std::vector;
class NFA
{
    size_t state_cnt;
    size_t charset_cnt;
    map<pair<size_t, vector<size_t>>, set<size_t>>trans;
    set<size_t>initial_state;
    set<size_t>final_state;
public:
    friend void NtoD(const NFA * nfa, DFA* dfa);
    friend class RegFit;
    NFA();
    NFA(size_t sc, size_t cc, map<pair<size_t, vector<size_t>>, set<size_t>>t, set<size_t>is, set<size_t>fs);
    set<size_t>closure(set<size_t>I);
    set<size_t>go(set<size_t>I,size_t a);
};
void NtoD(const NFA * nfa, DFA* dfa);